import { UserConfig, ConfigEnv, loadEnv, defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

/** element plus 自动按需导入插件 start */
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
/** element plus 自动按需导入插件 end */
import vueSetupExtend from 'vite-plugin-vue-setup-extend'
import viteCompression from 'vite-plugin-compression'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';	 //SVG精灵图生成插件

//获取绝对路径
import path from "path";
const appPath = path.resolve(__dirname, "src");
// https://vite.dev/config/
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
	const env = loadEnv(mode, process.cwd());
	return {
		resolve:{
			alias: {
				'@':appPath
			}
		},
		server:{
			host: "0.0.0.0",
			port: Number(env.VITE_APP_PORT),
			open: true, // 运行是否自动打开浏览器3647.51   2662.39 
			proxy: {	// 反向代理解决跨域
				[env.VITE_APP_BASE_API]: {
					target: env.VITE_APP_BASE_URL, 
					changeOrigin: true,
					rewrite: (path) => path.replace(new RegExp("^" + env.VITE_APP_BASE_API), "")
				}
			}
		},
		plugins: [
			vue(),
			vueSetupExtend(),
			AutoImport({
				// 自动导入 Vue 相关函数，如：ref, reactive, toRef 等
				imports: ["vue", "@vueuse/core"],
				ignore: ['h'], // 自动添加 import { h } from '/node_modules/.vite/deps/vue.js 代码问题处理
				resolvers: [
					ElementPlusResolver(),
				],
				vueTemplate: true, // 是否在 vue 模板中自动导入
				dts: path.resolve(appPath, "autoImport", "auto-imports.d.ts"), //  自动导入组件类型声明文件位置，默认根目录; false 关闭自动生成
			}),
			Components({
				dirs: ['src/components', 'src/layout', path.resolve(appPath, "autoImport", "components.d.ts")],
				// 组件的有效文件扩展名
				extensions: ['vue', 'md'],
				// 搜索子目录
				deep: true,
				resolvers: [ElementPlusResolver({ importStyle: 'sass' })], // importStyle: "sass" ---  解决覆盖element plus 的sass变量不生效的bug
				// 在哪些目录下不自动导入组件
				exclude: [/[\\/]node_modules[\\/]/]
			}),
			createSvgIconsPlugin({
				// 设置图标所在文件夹路径
				iconDirs: [path.resolve(appPath, 'assets/icons')],
				// 设置symbolId的格式
				symbolId: 'icon-[dir]-[name]',
				// （可选）自定义插入位置，默认为body末尾
				// inject: 'body-first',
				// （可选）自定义DOM节点ID，默认为__svg__icons__dom__
				// customDomId: '__my-custom-id__',
			}),
			viteCompression({
				verbose: true, // 是否在控制台输出压缩结果
				disable: false, // 是否禁用
				threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
				algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
				ext: '.gz', // 生成的压缩包后缀
				deleteOriginFile: false //压缩后是否删除源文件
			})
		],
		css:{
			preprocessorOptions:{
				scss:{
					additionalData: '@use "@/styles/global.scss" as *;' //建议使用这行代码
				}
			}
		}
	}
})
 